當我們建立服務時,通常會涉及到資訊的輸入和輸出,例如網頁前後端、資料庫等。每當 Pod 啟動時,Kubernetes 會自動分配一個 IP 給它。然而,我們通常不知道每次分配的 IP,那麼該如何存取這個服務呢?
Kubernetes 已經考慮到這一點,提供了一個基本的 Service 供我們連接服務。同樣地,我們需要編寫一個 YAML 檔案來定義我們的服務,這次以 Nginx 為例。
# service.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-pod
  labels:
    app: nginx-pod  # 這邊的 Label ,key 跟 value 基本上隨便取即可。
spec:
  containers:
    - name: nginx
      image: nginx
      ports:
        - containerPort: 80
---
apiVersion: v1
kind: Service
metadata:
  name: nginx-nodeport-service
spec:
  type: NodePort
  selector:
    app: nginx-pod  # 要跟這邊對應
  ports:
    - name: nginx
      port: 3306
      targetPort: 80
      nodePort: 30000  # 30000 ~ 32767
在這個例子中,我們的 Pod 使用 Nginx 並開啟 Port 80。接著,我們的 Service 使用 Port 3306 連接到 Pod 的 Port 80,並在所有 Node 上開啟 Port 30000,供外部連線。NodePort 意味著 Service 會在所有 Worker Node 上開放相同的 nodePort 供外部連線,否則預設僅提供給 Kubernetes 內部連線。
別忘了對我們的 Pod 使用 Label 進行標記,並且 Service 會使用 Label Selector 去選擇對應 Label 的 Pod 進行連線。
接下來,我們使用以下指令讓我們的服務建立起來:
$ kubectl apply -f service.yaml
一旦服務建立起來,我們可以在任何一台機器上(Master 或 Worker)透過瀏覽器訪問 http://localhost:30000,查看我們建立起來的服務。
如果想查看所有的 Service,可以使用以下指令:
$ kubectl get service
# 或
$ kubectl get svc